package com.jingdianjichi.oss.config;

import com.jingdianjichi.oss.adapter.AliStorageAdapter;
import com.jingdianjichi.oss.adapter.MinioStorageAdapter;
import com.jingdianjichi.oss.adapter.StorageAdapter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @Author xf
 * @Aate 2024/3/5 下午 02:56
 * @Version v1.0.0
 * @Description : TODO: 根据配置文件的oss服务类型返回对应的service
 */
@Configuration
@RefreshScope
public class StorageConfig {

    @Value("${storage.service.type}")
    public String storageType;

    //这里如果有新的oss服务，还得注入，可以增加一个适配器来处理。并不是所有的oss服务都有这些业务处理，需要通过适配器来处理各自的逻辑。
    // 适配器来封装各自的组件，比如minio以及aliyun的等等。处理完提供统一的接口。适配器主要处理接口不兼容的问题。
    // 将中间层做成适配器的形式。
    @Bean
    @RefreshScope
    public StorageAdapter getStorageServiceByType() {
        if ("minio".equals(storageType)) {
            return new MinioStorageAdapter();
        } else if ("aliyun".equals(storageType)) {
            return new AliStorageAdapter();
        } else {
            throw new IllegalArgumentException("未找到对应的oss服务类型");
        }
    }
}